//#include<iostream>
//
//using namespace std;
//
//template<class T>
//struct DelArray
//{
//    void operator()(T* ptr)
//    {
//        delete[] ptr;
//    }
//};
//
//void test_shared()
//{
//    //
//    shared_ptr<string> sp1(new string[10],DelArray<string>());
//    shared_ptr<string> sp2(new string[10],[](string* ptr){delete[] ptr;});
//}
//
//

//
//#include <iostream>
//class HeapOnly {
//private:
//    // 私有化构造函数和析构函数
//    HeapOnly() {}
//    ~HeapOnly() {}
//public:
//    // 静态成员函数，用于在堆上创建对象
//    static HeapOnly* createObject() {
//        return new HeapOnly();
//    }
//
//    // 静态成员函数，用于在堆上创建对象
//    static void destroyObject(HeapOnly* obj) {
//        delete obj;
//    }
//    // 其他公有成员函数
//    void showMessage() {
//        std::cout << "HeapOnly object created on heap!" << std::endl;
//    }
//};
//
//int main() {
//    // 在堆上创建对象
//    HeapOnly* obj = HeapOnly::createObject();
//
//    // 使用对象
//    obj->showMessage();
//
//
//
//    // 释放对象
//    HeapOnly::destroyObject(obj);
//
//
//    return 0;
//}

//#include <iostream>
//
//class StackOnly {
//private:
//    // 私有化构造函数
//    StackOnly() {}
//
//public:
//    // 静态成员函数，用于在栈上创建对象并返回
//    static StackOnly createObject() {
//        return StackOnly();
//    }
//
//    // 其他公有成员函数
//    void showMessage() {
//        std::cout << "StackOnly object created on stack!" << std::endl;
//    }
//};
//
//int main() {
//    // 在栈上创建对象
//    StackOnly obj = StackOnly::createObject();
//
//    // 使用对象
//    obj.showMessage();
//
//    StackOnly* ptr=new StackOnly(obj);
//    return 0;
//}
#include<iostream>

using namespace std;
//class StackOnly
//{
//public:
//static StackOnly CreateObj()
//{
//return StackOnly();
//}
//// 禁掉operator new可以把下面用new 调用拷贝构造申请对象给禁掉
//// StackOnly obj = StackOnly::CreateObj();
//// StackOnly* ptr3 = new StackOnly(obj);
//void* operator new(size_t size) = delete;
//void operator delete(void* p) = delete;
//private:
//StackOnly()
//:_a(0)
//{}
//private:
//int _a;
//};
//
//int main()
//{
//
//}

int main()
{
    volatile const int a=2;
    int* p=const_cast<int*>(&a);
    
    (*p)++;
    //a++;
    
    cout<<a<<endl;
    cout<<*p<<endl;
    
    cout<<(int*)&a<<endl;
    cout<<p<<endl;
    return 0;
}
